
// DO NOT EDIT THIS FILE - it is machine generated -*- c++ -*-

#ifndef __gnu_java_math_GMP__
#define __gnu_java_math_GMP__

#pragma interface

#include <java/lang/Object.h>
#include <gcj/array.h>

extern "Java"
{
  namespace gnu
  {
    namespace classpath
    {
        class Pointer;
    }
    namespace java
    {
      namespace math
      {
          class GMP;
      }
    }
  }
}

class gnu::java::math::GMP : public ::java::lang::Object
{

public:
  GMP();
private:
  void acquireRef();
  void releaseRef();
public: // actually protected
  void finalize();
public:
  void fromByteArray(JArray< jbyte > *);
  void fromBI(::gnu::java::math::GMP *);
  void fromLong(jlong);
  jint fromString(::java::lang::String *, jint);
  void fromSignedMagnitude(JArray< jbyte > *, jboolean);
  ::java::lang::String * toString(jint);
  void toByteArray(JArray< jbyte > *);
  jdouble doubleValue();
  jint absIntValue();
  jint compare(::gnu::java::math::GMP *);
  void add(::gnu::java::math::GMP *, ::gnu::java::math::GMP *);
  void subtract(::gnu::java::math::GMP *, ::gnu::java::math::GMP *);
  void multiply(::gnu::java::math::GMP *, ::gnu::java::math::GMP *);
  void quotient(::gnu::java::math::GMP *, ::gnu::java::math::GMP *);
  void remainder(::gnu::java::math::GMP *, ::gnu::java::math::GMP *);
  void quotientAndRemainder(::gnu::java::math::GMP *, ::gnu::java::math::GMP *, ::gnu::java::math::GMP *);
  void modulo(::gnu::java::math::GMP *, ::gnu::java::math::GMP *);
  void pow(jint, ::gnu::java::math::GMP *);
  void modPow(::gnu::java::math::GMP *, ::gnu::java::math::GMP *, ::gnu::java::math::GMP *);
  void modInverse(::gnu::java::math::GMP *, ::gnu::java::math::GMP *);
  void gcd(::gnu::java::math::GMP *, ::gnu::java::math::GMP *);
  void shiftLeft(jint, ::gnu::java::math::GMP *);
  void shiftRight(jint, ::gnu::java::math::GMP *);
  void abs(::gnu::java::math::GMP *);
  void negate(::gnu::java::math::GMP *);
  jint bitLength();
  jint bitCount();
  void and$(::gnu::java::math::GMP *, ::gnu::java::math::GMP *);
  void or$(::gnu::java::math::GMP *, ::gnu::java::math::GMP *);
  void xor$(::gnu::java::math::GMP *, ::gnu::java::math::GMP *);
  void andNot(::gnu::java::math::GMP *, ::gnu::java::math::GMP *);
  void not$(::gnu::java::math::GMP *);
  void flipBit(jint, ::gnu::java::math::GMP *);
  jint testBit(jint);
  void setBit(jint, jboolean, ::gnu::java::math::GMP *);
  jint testPrimality(jint);
  jint lowestSetBit();
  static void natInitializeLibrary();
private:
  void natInitialize();
  void natFinalize();
  void natFromLong(jlong);
  void natFromBI(::gnu::classpath::Pointer *);
  void natFromByteArray(JArray< jbyte > *);
  jint natFromString(::java::lang::String *, jint);
  void natFromSignedMagnitude(JArray< jbyte > *, jboolean);
  ::java::lang::String * natToString(jint);
  void natToByteArray(JArray< jbyte > *);
  jint natAbsIntValue();
  jdouble natDoubleValue();
  jint natCompare(::gnu::classpath::Pointer *);
  void natAdd(::gnu::classpath::Pointer *, ::gnu::classpath::Pointer *);
  void natSubtract(::gnu::classpath::Pointer *, ::gnu::classpath::Pointer *);
  void natMultiply(::gnu::classpath::Pointer *, ::gnu::classpath::Pointer *);
  void natQuotient(::gnu::classpath::Pointer *, ::gnu::classpath::Pointer *);
  void natRemainder(::gnu::classpath::Pointer *, ::gnu::classpath::Pointer *);
  void natQuotientAndRemainder(::gnu::classpath::Pointer *, ::gnu::classpath::Pointer *, ::gnu::classpath::Pointer *);
  void natModulo(::gnu::classpath::Pointer *, ::gnu::classpath::Pointer *);
  void natPow(jint, ::gnu::classpath::Pointer *);
  void natModPow(::gnu::classpath::Pointer *, ::gnu::classpath::Pointer *, ::gnu::classpath::Pointer *);
  void natModInverse(::gnu::classpath::Pointer *, ::gnu::classpath::Pointer *);
  void natGCD(::gnu::classpath::Pointer *, ::gnu::classpath::Pointer *);
  jint natTestPrimality(jint);
  void natShiftLeft(jint, ::gnu::classpath::Pointer *);
  void natShiftRight(jint, ::gnu::classpath::Pointer *);
  jint natLowestSetBit();
  void natAbs(::gnu::classpath::Pointer *);
  void natNegate(::gnu::classpath::Pointer *);
  jint natBitLength();
  jint natSetBitCount();
  void natXor(::gnu::classpath::Pointer *, ::gnu::classpath::Pointer *);
  void natOr(::gnu::classpath::Pointer *, ::gnu::classpath::Pointer *);
  void natAnd(::gnu::classpath::Pointer *, ::gnu::classpath::Pointer *);
  void natAndNot(::gnu::classpath::Pointer *, ::gnu::classpath::Pointer *);
  void natFlipBit(jint, ::gnu::classpath::Pointer *);
  jint natTestBit(jint);
  void natSetBit(jint, jboolean, ::gnu::classpath::Pointer *);
  void natNot(::gnu::classpath::Pointer *);
  ::gnu::classpath::Pointer * __attribute__((aligned(__alignof__( ::java::lang::Object)))) native_ptr;
  jint refCount;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_java_math_GMP__
